package com.etc.service;

import java.util.List;
import java.util.Map;

import com.etc.entity.MusicInfo;
import com.etc.entity.PageInfo;

/**
 * 歌曲业务层
 * @author nianxulin
 *
 */
public interface MusicService {
	/**
	 * 根据id获取歌曲对象
	 * @param musicId
	 * @return
	 */
	MusicInfo findByid(Integer musicId);
	/**
	 * 根据用户id获得用户收藏歌曲
	 * @param userId
	 * @return
	 */
	List<MusicInfo> findByUserId(Integer userId);
	
	/**
	 * 电台歌单id获取所有歌曲
	 * @param broadcastingStationId
	 * @return
	 */
	List<MusicInfo> findBysongSleetId(Integer broadcastingStationId);
	
	// ============================================ admin 操作  Service ======================================
	
	/**
	 * 添加歌曲
	 * @param musicInfo
	 * @return
	 */
	boolean addSong(MusicInfo musicInfo);
	
	/**
	 * 修改歌曲信息
	 * @param musicInfo
	 * @return
	 */
	boolean modifySongInfo(MusicInfo musicInfo);
	
	/**
	 * 根据歌曲ID删除歌曲
	 * @param musicId
	 * @return
	 */
	boolean deleteSongById(Integer musicId);
	
	/**
	 * 根据歌曲编号查询歌曲信息
	 * @param musicId
	 * @return
	 */
	MusicInfo getMusicInfoById(Integer musicId);
	
	/**
	 * 根据歌曲名进行模糊查询
	 * @param musicName
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	PageInfo<MusicInfo> getSongInfoBySongName(String musicName,int pageNum,int pageSize);

	/**
	 * 获得各种风格的点赞数占比
	 * @return
	 */
	List<Map<String, Object>> getLikeCountGrounpByStyle();
	
	/**
	 * 根据歌手id获取歌曲列表
	 * @param singgerId
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	PageInfo<MusicInfo> getsongListBySingerId(Integer singgerId,int pageNum, int pageSize);
	
	
	/**
	 * 导出所有的音乐信息
	 * @return
	 */
	List<MusicInfo> exportMusicInfos();

	/**
	 * 根据关键字模糊查询歌曲
	 * @param keyWord
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	PageInfo<MusicInfo> getSongListByKeyWord(String keyWord,int pageNum, int pageSize);

	
	/**
	 * 得到近半年的新歌
	 * @param languagesName
	 * @return
	 */
	List<MusicInfo> getHalfYearMusic(String languagesName);
	

	/**
	 * 根据情况得到相应的音乐信息
	 * @param condition
	 * @return
	 */
	List<MusicInfo> getListByCondition(Integer condition);
	
	/**
	 * 查找每个风格的音乐数量
	 * @return
	 */
	List<Map<String, Object>> getStyleCount();


}
